﻿/*请编写一个函数，用于 删除单链表中某个特定节点 。在设计函数时需要注意，你无法访问链表的头节点 head ，只能直接访问 要被删除的节点 。
题目数据保证需要删除的节点 

示例1：
输入：head = [4,5,1,9], node = 5
输出：[4,1,9]
解释：指定链表中值为 5 的第二个节点，那么在调用了你的函数之后，该链表应变为 4 -> 1 -> 9

示例2:
输入：head = [4,5,1,9], node = 1
输出：[4,5,9]
解释：指定链表中值为 1 的第三个节点，那么在调用了你的函数之后，该链表应变为 4 -> 5 -> 9
示例 3：

输入：head = [1,2,3,4], node = 3
输出：[1,2,4]
示例 4：

输入：head = [0,1], node = 0
输出：[1]
示例 5：

输入：head = [-3,5,-99], node = -3
输出：[5,-99]
*/
#include<iostream>
using namespace std;
typedef struct ListNode {
    int val;
    ListNode *next;
//    ListNode(int x) : val(x), next(NULL) {}
}ListNode; 
ListNode *init(){
	ListNode *L;
	L=new ListNode;
	L->next=NULL;
	return L;
}

class Solution {
public:
    void deleteNode(ListNode* node) {
		node->val=node->next->val;
		node->next=node->next->next;
    }
};
void printList(ListNode *L){
    ListNode *p=L->next;
    int i=0;
    while(p){
		printf("第%d个元素的值为:%d\n",++i,p->val);
        p=p->next;
    }
}
void main(){
	Solution *s;
	ListNode *m=init();
	ListNode *p=m;
	ListNode *q=m;
	int x;
	cout<<"head:";
	for(int i=0;;i++){
		cin>>x;
		ListNode *p=init();
		p->val=x;
		m->next=p;
		m=p;
		if(getchar()=='\n'){
			break;
		}
	}
	m->next=NULL;
	printList(p);
	cout<<"node:";
	int node;
	cin>>node;
	while(q->next!=NULL&&q->val!=node){
		q=q->next;
	}
	s->deleteNode(q);
	printList(p);
	system("pause");
}